# 导入
import json
from DrissionPage import Chromium
import time
import random
# 连接浏览器
browser = Chromium()
page = browser.latest_tab

page.listen.start('product/info')  # 监听指定url的数据包


def random_wait():

    wait_time = random.uniform(5, 8)  # 生成一个介于1到5秒之间的随机浮点数
    print(f"Waited for {wait_time:.2f} seconds")

    time.sleep(wait_time)  # 等待指定的秒数


def get_product(procode):
    page.get(f'https://www.macklin.cn/products/{procode}')  # 访问网址，这行产生的数据包不监听
    res = page.listen.wait()
    pro_json = res.response.body
    if pro_json['code'] == 200:
        return del_key(pro_json)


def get_procode_list(filename):
    procode_list = []
    with open(filename, 'r', encoding='utf-8') as f:
        raw_data = json.load(f)
    for page in raw_data:
        for product in page['dataList']:
            procode_list.append(product['proCode'].split('-')[0])

    return procode_list


def del_key(json_data: dict) -> dict:
    """官网数据处理删除无用字段

    Args:
        json_data (dict): 官网json数据

    Returns:
        _type_: _description_
    """
    del json_data["data"]['bulk_product']
    del json_data["data"]["item"]["item_safe_level"]
    del json_data["data"]["item"]["item_transport"]
    del json_data["data"]["item"]["item_product_cate"]
    del json_data["data"]["item"]["item_if_stock"]
    del json_data["data"]["item"]["item_max_package"]
    del json_data["data"]["item"]["item_can_pack"]
    del json_data["data"]["item"]["item_application"]
    del json_data["data"]["item"]["item_properties"]
    del json_data["data"]["item"]["item_rotatory"]
    del json_data["data"]["item"]["item_limited"]
    del json_data["data"]["item"]["item_particle"]
    del json_data["data"]["item"]["item_area"]
    del json_data["data"]["item"]["item_text_desc"]
    del json_data["data"]["item"]["nmr"]
    del json_data["data"]["item"]["item_upfile"]
    del json_data["data"]["item"]["item_instruction"]
    # del json_data["data"]["item"]["product"]
    del json_data["data"]["item"]["safe_level_arr"]
    del json_data["data"]["item"]["activity"]
    del json_data["data"]["item"]["nav_category"]
    del json_data["data"]["item"]["articles"]
    del json_data["data"]["item"]["other_products"]

    # 保留图片地址
    json_data["data"]["item"]["item_img"] = json_data["data"]["item"][
        "up_img"]["filepath"]
    del json_data["data"]["item"]["up_img"]

    temp_list = []
    for item in json_data["data"]["item"]["product"]:
        temp_list.append({
            "product_id": item["product_id"],
            "product_code": item["product_code"],
            "product_price": item["product_price"],
        })
    # 保留商品规格
    json_data["data"]["item"]["product"] = temp_list
    return json_data['data']['item']


def update_keys(json_data):
    """更新商品json信息

    Args:
        json_data (dict): 官网json数据

    Returns:
        _type_: _description_
    """
    del json_data["item_safe_level"]
    del json_data["item_transport"]
    del json_data["item_product_cate"]
    del json_data["item_if_stock"]
    del json_data["item_max_package"]
    del json_data["item_can_pack"]
    del json_data["item_application"]
    del json_data["item_properties"]
    del json_data["item_rotatory"]
    del json_data["item_limited"]
    del json_data["item_particle"]
    del json_data["item_area"]
    del json_data["item_text_desc"]
    del json_data["nmr"]
    del json_data["item_upfile"]
    del json_data["item_instruction"]

    del json_data["safe_level_arr"]
    # del json_data["activity"]
    del json_data["nav_category"]
    del json_data["articles"]
    # del json_data["other_products"]

    # 保留图片地址
    json_data["item_img"] = json_data["up_img"]["filepath"]
    del json_data["up_img"]

    temp_list = []
    for item in json_data["product"]:
        temp_list.append({
            "product_id": item["product_id"],
            "product_code": item["product_code"],
            "product_price": item["product_price"],
        })
    # 保留商品规格
    json_data["product"] = temp_list
    return json_data


if __name__ == '__main__':

    pro_json_list = []  # 创建数据存储列表


    # procode_list = get_procode_list("ids.json")
    with open('ids.json', 'r', encoding='utf-8') as f:
        procode_list = json.load(f)
    
    total = len(procode_list)

    for index, code in enumerate(procode_list, start=1):
        total -= 1
        print(f"获取内容:{code},剩余:{total}条")

        pro_json_list.append(get_product(code.split('-')[0]))
        random_wait()  # 随机等待防止封禁
        if index % 50 == 0 or total == 0:  # 每50条或者最后一次循环时将数据保存到文件中
            filename = f"mkl_ids_{index // 50}.json"
            print(f"保存到文件: {filename}")
            with open('data/' + filename, "w", encoding="utf-8") as f:
                f.write(json.dumps(pro_json_list, ensure_ascii=False,
                                   indent=4))
            pro_json_list = []  # 清空列表以便下次保存
    print("done")
